package com.xkcoding.swagger.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * <p>
 * Swagger2 配置
 * </p>
 *
 * @package: com.xkcoding.swagger.config
 * @description: Swagger2 配置类
 * @author: yangkai.shen
 * @date: Created in 2018-11-29 11:14
 * @copyright: Copyright (c) 2018
 * @version: V1.0
 * @modified: yangkai.shen
 */
@Configuration//配置类的注解
@EnableSwagger2//标记Swagger的配置文件
public class Swagger2Config {


    /**
     * 注入Docket这个类，生成Swagger的核心对象，前台的api管理
     * @return
     */
    @Bean
    public Docket webRestApi() {
        //指定Swagger2的文件
        return new Docket(DocumentationType.SWAGGER_2)
                //组名定义，就是定义前端api管理组名
                .groupName("webRestApi")
                //调用下面的私有方法，对文档说明
                .apiInfo(apiInfo())
                 //过滤路径
                .select()

                .apis(RequestHandlerSelectors.basePackage("com.xkcoding.swagger.controller"))
                 //过滤的路径具体定义，这里定义的any，所有
                .paths(PathSelectors.any())
                //建立
                .build();
    }


    /**
     * 注入Docket这个类，生成Swagger的核心对象，后台的api管理
     * @return
     */
    @Bean
    public Docket adminRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)
                //组名定义，就是定义后端api的管理组名
                .groupName("adminRestApi()")
                //调用下面的私有方法，对文档说明
                .apiInfo(apiInfo())
                //过滤路径
                .select()

                .apis(RequestHandlerSelectors.basePackage("com.xkcoding.swagger.controller"))
                //过滤的路径具体定义，这里定义的any，所有
                .paths(PathSelectors.any())
                //建立
                .build();


    }






    /**
     * 注入ApiInfo这个类，这个是辅助方法，私有就行
     * @return
     */
    private ApiInfo apiInfo() {
        //api文档的标题
        return new ApiInfoBuilder().title("spring-boot-demo")
                //文档的描述
                .description("这是一个简单的 Swagger API 演示")
                //文档联系人，名字，邮箱。。等等
                .contact(new Contact("Yangkai.Shen", "http://xkcoding.com", "237497819@qq.com"))
                //文档版本
                .version("1.0.0-SNAPSHOT")
                .build();
    }

}
